package org.halk.sentinel_demo.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.sun.deploy.security.BlockedException;
import org.apache.coyote.OutputBuffer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Author zhuhao
 * @Date 2022/1/20 10:00
 * @desc
 */
@RestController
public class TestController {

    //定义资源 value:设置资源的名称 blockHandler:设置限流或降级的处理函数
    @SentinelResource(value = "hollo method", blockHandler = "exceptionHandler")
    @GetMapping("/hello")
    public String hello() {
//        try (Entry entry = SphU.entry("Hello")) {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSSS").format(new Date());
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return "系统繁忙";
    }

    public String exceptionHandler(BlockException e) {
        e.printStackTrace();
        return "system is busy";
    }

//    @PostConstruct
//    public void init() {
//        //1.创建存放限流规则的集合
//        List<FlowRule> rules = new ArrayList<>();
//        //2.创建限流规则
//        FlowRule rule = new FlowRule();
//        //定义资源，表示Sentinel会对哪个资源生效
//        rule.setResource("Hello");
//        //定义限流的类型(此处使用QPS作为限流类型)
//        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
//        //定义QPS每秒通过的请求数
//        rule.setCount(2);
//        //3.将限流规则存放到集合中
//        rules.add(rule);
//        //4.加载限流规则
//        FlowRuleManager.loadRules(rules);
//    }
}
